#!/bin/bash

# 检查系统类型
OS_NAME=$(lsb_release -is 2>/dev/null || echo "unknown")
OS_VERSION=$(lsb_release -rs 2>/dev/null || echo "unknown")

if [ "$OS_NAME" == "Ubuntu" ]; then
    # 检查 Ubuntu 版本
    if [[ "$OS_VERSION" =~ ^20\..* ]]; then
        echo "Ubuntu 20.x 检测到，继续执行优化脚本"
    else
        echo "不支持的 Ubuntu 版本：$OS_VERSION"
        exit 1
    fi
elif [ "$OS_NAME" == "CentOS" ]; then
    # 检查 CentOS 版本
    if [ "$OS_VERSION" == "7.9" ]; then
        echo "CentOS 7.9 检测到，继续执行优化脚本"
    else
        echo "不支持的 CentOS 版本：$OS_VERSION"
        exit 1
    fi
else
    echo "不支持的操作系统：$OS_NAME"
    exit 1
fi

# 创建并写入 sysctl 配置文件
if [ "$OS_NAME" == "Ubuntu" ]; then
    cat <<EOF | sudo tee /etc/sysctl.d/99-custom.conf
# 禁用 Watchdog，防止监控过程中引起的抖动
kernel.watchdog = 0

# 设置 swappiness 为 0，避免使用交换分区
vm.swappiness = 0

# 设置 dirty_ratio 为 10，控制脏页的比例
vm.dirty_ratio = 10

# 设置 dirty_background_ratio 为 3，限制脏页数量，当超过该值时开始写入磁盘
vm.dirty_background_ratio = 3

# 设置 sched_latency_ns 为 24000000，指定任务切换前在 CPU 核心上运行的最长时间
kernel.sched_latency_ns = 24000000

# 设置 sched_min_granularity_ns 为 10000000，指定最小时间粒度
kernel.sched_min_granularity_ns = 10000000

# 禁用 sched_rt_runtime_us 的限制，允许实时任务不受限制地运行
kernel.sched_rt_runtime_us = -1

# 设置 stat_interval 为 1000 秒，减少虚拟内存统计信息更新的频率
vm.stat_interval = 1000
EOF

    # 应用 sysctl 设置
    sudo sysctl --system
    echo "Sysctl 设置已应用"

    # 设置 CPU 频率调节策略为 performance 模式
    for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
        echo performance | sudo tee $cpu
        echo "CPU $(basename $(dirname $cpu)) 的 scaling_governor 已设置为 performance"
    done

    # 创建 systemd 服务文件
    cat <<EOF | sudo tee /etc/systemd/system/optimize_system.service
[Unit]
Description=Optimize System Performance
After=network.target

[Service]
Type=oneshot
ExecStart=/path/to/optimize_system.sh

[Install]
WantedBy=multi-user.target
EOF

    # 启用并启动 systemd 服务
    sudo systemctl daemon-reload
    sudo systemctl enable optimize_system.service
    sudo systemctl start optimize_system.service

elif [ "$OS_NAME" == "CentOS" ]; then
    # CentOS 系统特有的配置（如有需要）
    cat <<EOF | sudo tee /etc/sysctl.d/99-custom.conf
# 禁用 Watchdog，防止监控过程中引起的抖动
kernel.watchdog = 0

# 设置 swappiness 为 0，避免使用交换分区
vm.swappiness = 0

# 设置 dirty_ratio 为 10，控制脏页的比例
vm.dirty_ratio = 10

# 设置 dirty_background_ratio 为 3，限制脏页数量，当超过该值时开始写入磁盘
vm.dirty_background_ratio = 3

# 设置 sched_latency_ns 为 24000000，指定任务切换前在 CPU 核心上运行的最长时间
kernel.sched_latency_ns = 24000000

# 设置 sched_min_granularity_ns 为 10000000，指定最小时间粒度
kernel.sched_min_granularity_ns = 10000000

# 禁用 sched_rt_runtime_us 的限制，允许实时任务不受限制地运行
kernel.sched_rt_runtime_us = -1

# 设置 stat_interval 为 1000 秒，减少虚拟内存统计信息更新的频率
vm.stat_interval = 1000
EOF

    # 应用 sysctl 设置
    sudo sysctl --system
    echo "Sysctl 设置已应用"

    # 设置 CPU 频率调节策略为 performance 模式
    for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
        echo performance | sudo tee $cpu
        echo "CPU $(basename $(dirname $cpu)) 的 scaling_governor 已设置为 performance"
    done

    # 创建 systemd 服务文件
    cat <<EOF | sudo tee /etc/systemd/system/optimize_system.service
[Unit]
Description=Optimize System Performance
After=network.target

[Service]
Type=oneshot
ExecStart=/path/to/optimize_system.sh

[Install]
WantedBy=multi-user.target
EOF

    # 启用并启动 systemd 服务
    sudo systemctl daemon-reload
    sudo systemctl enable optimize_system.service
    sudo systemctl start optimize_system.service
fi

echo "系统优化设置已完成并配置为开机自动运行"
